package com.solomiao.demo.multi.thread.demo5;

/**
 * @desc 使用volatile修饰的停止标志，保证线程间变量的可见性
 * */
public class MainDemo5 {

    // 使用 volatile 修饰的停止标志
    private static volatile boolean running = true;

    public static void main(String[] args) throws InterruptedException {
        // 启动一个线程，该线程会不断打印，直到 running 变为 false
        Thread workerThread = new Thread(() -> {
            int count = 0;
            while (running) {  // 这里会不断读取 running 的值
                System.out.println("线程运行中... " + (++count));
                try {
                    Thread.sleep(500); // 模拟工作
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("线程已停止！");
        });

        workerThread.start();

        // 主线程休眠 3 秒后，设置 running = false，通知子线程停止
        Thread.sleep(3000);
        System.out.println("主线程设置 running = false，准备停止子线程");
        running = false;  // 修改 volatile 变量

        // 等待 workerThread 线程结束
        workerThread.join();
        System.out.println("主线程结束");
    }
}
